Skip to content

PM2 介绍与常用命令

一、核心要点速览

💡 核心考点

  • PM2: Node.js 生产级进程管理器(类似 supervisor)
  • 核心功能: 进程守护、负载均衡、日志管理、自动重启
  • 关键命令: start/stop/restart/list/logs/monit
  • 配置文件: ecosystem.config.js 多环境管理
  • 集群模式: 多核利用 + 零停机重启

二、重要资源链接

资源链接说明
官方网站pm2.keymetrics.io产品介绍、下载
官方文档pm2.keymetrics.io/docs完整使用教程
GitHubgithub.com/Unitech/pm2源码、Issue、PR
NPM 包npmjs.com/package/pm2安装包、版本
插件市场pm2.keymetrics.io/docs/modules扩展模块
安装命令npm install pm2@latest -g全局安装

三、PM2 快速入门

1. PM2 是什么

PM2 定位:Node.js 生产级进程管理器

核心特点:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ 进程守护 - 应用崩溃自动重启,系统重启自动启动
✓ 负载均衡 - 集群模式利用多核 CPU,提升性能
✓ 日志管理 - 自动收集日志,支持日志轮转
✓ 监控面板 - 实时监控 CPU、内存使用情况
✓ 零停机重启 - reload 命令实现无缝重启
✓ 配置管理 - ecosystem.config.js 多环境支持

技术栈:
  语言:Node.js
  模式:单进程/集群模式
  适用:Node.js/Python/Java等
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2. 安装与初始化

bash
# ========== 全局安装 ==========
npm install pm2@latest -g
yarn global add pm2

# 验证安装
pm2 --version

# ========== 快速启动 ==========
pm2 start app.js              # 启动应用
pm2 start app.js -i 4         # 集群模式,4 实例
pm2 start app.js -i max       # 集群模式,CPU 核心数
pm2 list                      # 查看进程
pm2 logs                      # 查看日志
pm2 monit                     # 实时监控

# ========== 开机自启 ==========
pm2 startup                   # 生成开机自启命令
pm2 save                      # 保存进程列表

四、常用命令速查

1. 进程管理(高频)

bash
# 启动
pm2 start app.js                    # 启动应用
pm2 start app.js -i max             # 集群模式
pm2 start app.js --name "api"       # 指定名称
pm2 start app.js --watch            # 监听变化

# 停止
pm2 stop all                        # 停止所有
pm2 stop 0                          # 停止 id=0
pm2 stop "api-*"                    # 按名称停止

# 重启
pm2 restart all                     # 重启所有
pm2 reload all                      # 零停机重载(集群)
pm2 gracefulReload all              # 优雅重载

# 删除
pm2 delete all                      # 删除所有
pm2 delete 0                        # 删除特定

2. 监控与日志(每天使用)

bash
# 日志
pm2 logs                            # 查看所有日志
pm2 logs api                        # 查看特定应用
pm2 logs --lines 100                # 最近 100 行
pm2 logs --timestamp                # 显示时间戳

# 清空日志
pm2 flush                           # 清空所有

# 监控
pm2 monit                           # 实时监控面板
pm2 dashboard                       # Web 仪表盘

3. 高级操作(每周/月使用)

bash
# 进程缩放
pm2 scale api 8                     # 缩放到 8 实例
pm2 scale api +2                    # 增加 2 实例

# 系统配置
pm2 startup                         # 开机自启
pm2 save                            # 保存进程
pm2 update                          # 更新 PM2

# 清理
pm2 kill                            # 杀死所有进程
pm2 purge                           # 清除所有日志

4. 命令频率分类表

频率命令说明
每天多次start stop restart list logs monit日常管理
每周使用reload delete describe scale维护操作
每月使用startup save flush update系统配置
很少使用kill purge expose dashboard特殊场景

五、配置文件详解

1. ecosystem.config.js 基础

javascript
module.exports = {
  apps: [{
    name: 'my-app',                    // 应用名称
    script: './app.js',                // 启动脚本
    
    // 实例配置
    instances: 4,                      // 实例数
    exec_mode: 'cluster',              // cluster/fork
    
    // 环境变量
    env: {
      NODE_ENV: 'development',
      PORT: 3000
    },
    env_production: {
      NODE_ENV: 'production',
      PORT: 8080
    },
    
    // 日志配置
    log_date_format: 'YYYY-MM-DD HH:mm:ss',
    error_file: './logs/error.log',
    out_file: './logs/out.log',
    
    // 重启策略
    autorestart: true,                 // 自动重启
    watch: false,                      // 监听文件
    max_restarts: 10,                  // 最大重启次数
    min_uptime: '10s',                 // 最小运行时间
    
    // 资源限制
    max_memory_restart: '500M'         // 内存限制
  }]
}

// 使用方式:
// pm2 start ecosystem.config.js
// pm2 start ecosystem.config.js --env production

2. 多应用配置示例

javascript
module.exports = {
  apps: [
    {
      name: 'api-server',
      script: './api/index.js',
      instances: 4,
      exec_mode: 'cluster',
      env: { PORT: 3000 }
    },
    {
      name: 'worker',
      script: './worker.js',
      instances: 2,
      exec_mode: 'fork',
      env: { QUEUE_NAME: 'default' }
    },
    {
      name: 'scheduler',
      script: './scheduler.js',
      instances: 1,
      cron_restart: '0 */6 * * *'  // 每 6 小时重启
    }
  ]
}

六、面试标准回答

PM2 是一个功能强大的 Node.js 生产级进程管理器,主要用于管理和守护应用程序进程。

核心功能包括

  1. 进程守护:应用崩溃自动重启,系统重启自动启动
  2. 负载均衡:集群模式利用多核 CPU,提升性能
  3. 日志管理:自动收集日志,支持日志轮转
  4. 监控面板:实时监控 CPU、内存使用情况
  5. 零停机重启:reload 命令实现无缝重启

常用命令

  • pm2 start app.js -i max:集群模式启动
  • pm2 list/status:查看进程状态
  • pm2 logs:查看日志
  • pm2 monit:实时监控
  • pm2 restart/reload:重启应用
  • pm2 stop/delete:停止/删除应用

配置文件 ecosystem.config.js可以管理多个应用,支持多环境配置,是生产环境的标准做法。

实际项目中,我会:

  • 使用集群模式充分利用 CPU 核心
  • 配置内存限制防止内存泄漏
  • 设置日志轮转避免磁盘占满
  • 配置开机自启保证服务可用性

相比 supervisor/systemd,PM2 的优势是更简单的配置和使用,内置集群模式和负载均衡,更好的日志和监控支持。


七、记忆口诀

PM2 歌诀:

PM2 是进程管家,
Node 应用离不开它。
start 启动 cluster 模式,
-i max 用满 CPU!

list 查看进程表,
logs 日志实时查。
monit 监控看状态,
restart 重启不中断!

配置文件要写好,
多环境来管理它。
生产环境要优化,
开机自启保稳定!

八、总结一句话

  • PM2: 进程守护 + 负载均衡 = Node.js 部署标配 🚀
  • 常用命令: start/stop/logs/monit = 运维必备技能
  • 配置文件: ecosystem.config.js = 多应用管理神器 🎯
  • 集群模式: 多核利用 + 零停机 = 高可用保障
最近更新